Se você é um analista web sabe que o serviço ASPNET do servidor web está integrado com um monte de serviços do servidor windows, de bancos de dados, de servidores de Email, etc.
Foram desenvolvidos componentes com a finalidade específica de fazer a interface do serviço externo ao servidor web como o ADO que permite acessar banco de dados ou mesmo componentes para um determinado tipo de aplicação ASP NET, por exemplo o serviço de envio de email do ASP NET é ligeiramente diferente do ASP NET CORE e, dependendo do servidor de email utilizado, o componente pode ser outro.
Os componentes externos ao servidor web operam de maneira integrada com ele. Por exemplo, se a página web deseja acessar um banco de dados o servidor web chama o componente que faz isso. Através de um protocolo firmado por ambas as partes(servidor web e servidor de banco de dados) são passadas informações de um lado para o outro. Então, por exemplo, o servidor passa ao componente as credenciais de acesso do usuário bem como a querie a ser executada. Os dados são enviados ao servidor de banco de dados que as analiza e devolve as informações solicitadas em caso de sucesso ou um status ou mensagem de erro em caso de falha. Veja a imagem abaixo:
Com os serviços dos componentes externos ao servidor web expadimos as funcionalidades do servidor web. Por exemplo, se você quiser que seu servidor fale e entenda o que o usuário está falando tem um serviço da google que faz o reconhecimento de voz e o serviço que executa a fala é nativo em todas as plataformas web através dos componentes que 'falam' com o sistema operacional. Tem um outro da Amazon que faz a interface com a Alexa. Procure que você vai achar, contudo às vezes terá que pagar por eles.
CGI significa Common Gateway Interface ou em português, Porta de Interface comum. É um mecanismo desenvolvido nos primórdios dos servidores web que permite o contato entre o servidor web com o web browser do cliente de maneira que possa ser enviadas informações em ambos os lados. O mecanismo comum ao servidor CGI são os scripts CGI que são muito parecidos com os serviços do ASP clássico ou PHP...por isso são tão parecidos, tem o mesmo pai.
Neste serviço básico de comunicação podemos enviar informações do lado do usuário para o lado do cliente. Se você, por exemplo, quer acessar sua conta bancária como poderia se não fosse enviado seu usuário, conta, senha para o servidor web ?
Os controles de servidor HTML são os controles clássicos HTML como a tag Form que agrupa um conjunto cujo conteúdo deverá ser enviado ao servidor.
Nota : Se não existir a tag runat="server" num form dentro de uma página ASP NET os
controles dentro do form serão enviados ao servidor web via mecanismo CGI.
Isto faz com que, por exemplo, possamos ter mais de um form HTML dentro de uma página
ASP NET o que não seria possível se o controle fosse runat="server".
Contudo como o mecanismo de envio não é asp net os processos asp net não serão disparados.
Por exemplo, se a página for enviada ao servidor e reenviada ao cliente e dentro de um
controle tivermos o evento onIndexChange ele não será disparado porque não foi o mecanismo
ASP NET que tomou conta do caso.
Controle : | Form |
Código : | <form action="/" method="post"></form> |
Como é enviado ao Cliente : | <form action="/" method="post"></form> |
Incluir Item : | Não |
Utilidade do controle : |
Enviar informação do lado do cliente para o lado do servidor. |
O método pode ser post ou get e são recursos de um servidor CGI.
Pode ser novidade para você mas um servidor ASP ou ASP NET roda PHP nativamente. É um
recurso que ele tem por compatibilidade com plataformas anteriores que muitos não
conseguem aproveitar.
Caso o modo seja get os dados serão enviados na url da página.
Exemplo da Url com método get:
url.com.br/pagina.asp?par1=x&par2=y&par3=z.
Onde par1, par2 e par3 são nome de parâmetros e x,y,z são os valores desses
parâmetros respectivamente.
Na página de destino os dados do form podem ser recuperados pelo método:
request.querystring("nomeCampo") que, no exemplo acima, NomCampo seria par1, par2, par3.
Se o método for post os dados serão enviados dentro do Mime do documento.
Como o usuário não tem acesso ao Mime do documento, o método post é
muito mais seguro que o método get.
Na página de destino os dados do form podem ser recuperados pelo método:
request.form("nomeCampo") onde NomeCampo seria o valor da tag name do campo
no form da página de origem.
Podemos ter no asp clássico ou php diversos forms numa mesma página. Com isso ao dar
submit devemos especificar de que form queremos obter os dados :
request.form("formx.nomeCampo") onde NomeCampo seria o valor da tag name do campo
na página de origem e formx seria o form onde o campo se encontra dentro da página origem.
Action é a página de destino das informações, para onde as informações serão enviadas ao dar o submit no form. Nesta página deverá haver o tratamento das informações digitadas pelo usuário ( via request.querystring ou request.form).
Importante : Se o campo dentro do Form for inserido via JavaScript ( ou jquery entre outros ), o valor não ficará disponível aos servidor ASP porque não foi ele que enviou o campo e ele simplesmente não enxerga esse campo no submit do form. E o motivo é claro, segurança.
No caso de file-upload no form deverá ser anexado um parâmetro enctype="multipart/form-data">
e com isso não é possível enviar outros controles junto com o file upload.
Caso tenha que enviar dados junto com o file-upload a solução é fazer o file-upload em javascript
que no final do envio do arquivo dá um submit no form.
Exemplo da tag form comum:
<form action="imagens.asp" method="post" onsubmit="return vldCampos();">
<input type="hidden" name="str_Area" value="Vendas" />
<input type="text" name="str_Paginas" id="str_Paginas" value="Pagina do Produto />
</form>
return vldCampos(); é o javascript que valida os campos do form e retorna true se é para prosseguir dando submit no form ou retorna false que impede o submit do form.
O input type hidden são informações sobre o campo que pretendo agregar após o submit do form.
Exemplo da tag form com file upload:
<form method="post" enctype="multipart/form-data" action="fileupload.asp">
Subir Imagem: <input type="file" id="Foto" name="Foto"/>
<input type="submit" value="Enviar Arquivo" style="margin-left: 80px;">
</form>
O exemplo acima envia uma foto para um blog.
Importante : Antes de fazer o file-upload verificar o tipo do arquivo. Muitas vezes enviam
coisas erradas e até vírus.
Seção Nostalgia : Me lembro do serviço CDONTS do asp clássico e como esses serviços são confiáveis e suportam uma grande quantidade de serviço. Foi isso que deu ao ASP NET a possibilidade de existencia : Pequenos, rápidos, eficientes...etc.
Como os serviços de componentes externos ao servidor web é muito grande fica impossível explicar como todos eles funcionam...citamos um ou outro e irei agregando mais conforme a necessidade.